{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73bd968b-d970-4a05-94ef-4e7abf990827",
   "metadata": {},
   "source": [
    "Chapter 15\n",
    "\n",
    "# SVD分解性质\n",
    "Book_4《矩阵力量》 | 鸢尾花书：从加减乘除到机器学习 (第二版)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "630eeacf-d3ab-4178-bd19-a132dbfb81e2",
   "metadata": {},
   "source": [
    "该代码实现了矩阵的奇异值分解（SVD）并通过图形展示分解结果和相关性质，特别是$U$和$V$矩阵的正交性和单一奇异值投影的效果。\n",
    "\n",
    "### 主要步骤\n",
    "1. **奇异值分解函数 $svd(X)$**：  \n",
    "   这个函数接收一个矩阵$X$，计算其SVD分解，即$X = U S V^T$。其中：\n",
    "   - $U$是左奇异矩阵，由$X X^T$的特征向量组成；\n",
    "   - $S$是奇异值构成的对角矩阵，包含非负的奇异值$s_i$；\n",
    "   - $V^T$是右奇异矩阵的转置，由$X^T X$的特征向量组成。\n",
    "   \n",
    "   具体实现中，通过`numpy`的`np.linalg.svd`函数得到$U, s, V^T$，其中$s$为奇异值向量。然后，根据是否使用完整矩阵形式构造对角矩阵$S$，并将奇异值进行舍入处理。\n",
    "\n",
    "2. **可视化SVD分解 $visualize\\_svd(X)$**：  \n",
    "   该函数调用$svd(X)$分解得到的$U, S, V$，并将$X, U, S, V^T$以热力图的形式进行可视化。图形展示了矩阵的结构和数值分布，使用的颜色映射范围固定在$[-6, 6]$。在可视化过程中，每个矩阵都用特定标签标注（如$X, U, S, V^T$），并将这些矩阵的单一图像呈现排列成一行。\n",
    "\n",
    "3. **验证矩阵正交性**：\n",
    "   - **$U \\times U^T = I$**：验证$U$矩阵的正交性，即$U$与其转置相乘应等于单位矩阵$I$。代码通过热力图展示$U, U^T$及$U \\times U^T$，其中$I$为单位矩阵。\n",
    "   - **$V \\times V^T = I$**：类似地，验证$V$矩阵的正交性，即$V$与其转置相乘等于单位矩阵$I$。同样使用热力图展示$V, V^T$及$V \\times V^T$。\n",
    "\n",
    "4. **奇异值矩阵分析**：  \n",
    "   通过热力图展示单个奇异值的投影效果，即$s_i u_i v_i^T$，其中：\n",
    "   - $s_i$是$S$中的奇异值；\n",
    "   - $u_i$和$v_i$分别是$U$和$V$的第$i$列向量。\n",
    "   \n",
    "   展示的每个热力图对应于$$s_i u_i v_i^T$$，其中$i$取值$1$到$4$，展示了该奇异值及其相关向量对矩阵的单项影响。\n",
    "\n",
    "5. **投影展示**：  \n",
    "   逐项展示每个奇异值与其对应的左、右奇异向量的投影效果，即展示矩阵$X$在向量$v_i$和$u_i$方向上的投影。具体地，对每个奇异值$s_i$，将其与对应的$v_i$和$u_i$构成的投影$$X_j = s_i u_i v_i^T$$展示出来。\n",
    "\n",
    "该代码的核心在于对SVD的分解过程和性质进行细致地展示，同时结合热力图展现矩阵结构，帮助理解SVD分解如何将矩阵分解为由特定方向和尺度控制的子矩阵的组合形式。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "00a1b59e-1864-48a0-bdcb-a6400102630b",
   "metadata": {},
   "source": [
    "## 导入必要的库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "bdc68c2a-84ca-4fc3-8319-d013ffca977a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np  # 导入NumPy库，用于数值计算\n",
    "from matplotlib import pyplot as plt  # 导入Matplotlib库用于绘图\n",
    "plt.rcParams['image.cmap'] = 'RdBu_r'  # 设置全局色彩映射为 'RdBu_r'\n",
    "import seaborn as sns  # 导入Seaborn库用于增强绘图效果\n",
    "PRECISION = 3  # 设置显示精度为小数点后三位"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a72fcd9f-d99b-4108-b333-84d628bd7a0f",
   "metadata": {},
   "source": [
    "## 定义SVD函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "652001c4-0081-4821-87e9-95a7181c65e6",
   "metadata": {},
   "outputs": [],
   "source": [
    "def svd(X):\n",
    "    \"\"\"\n",
    "    执行矩阵X的奇异值分解（SVD），并对奇异值进行舍入。\n",
    "    参数：\n",
    "    - X: 输入矩阵\n",
    "    返回：\n",
    "    - U, S, Vt: 舍入后的U矩阵、奇异值矩阵S和转置的V矩阵\n",
    "    \"\"\"\n",
    "    full_matrices = True  # 是否使用完整矩阵\n",
    "    U, s, Vt = np.linalg.svd(X, full_matrices=full_matrices)  # 计算X的SVD分解\n",
    "\n",
    "    if full_matrices:\n",
    "        S = np.zeros(X.shape)  # 创建与X形状相同的零矩阵\n",
    "        np.fill_diagonal(S, s)  # 将奇异值填入对角线\n",
    "    else:\n",
    "        S = np.diag(s)  # 将奇异值存入对角矩阵\n",
    "\n",
    "    return np.round(U, PRECISION), np.round(S, PRECISION), np.round(Vt.T, PRECISION)  # 舍入返回U、S和转置的V矩阵"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "85441c63-a464-46b2-931a-3b6b5f92cd76",
   "metadata": {},
   "source": [
    "## 定义可视化SVD结果的函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "2e544c1a-38cd-49d4-ba96-3e25341d9a9e",
   "metadata": {},
   "outputs": [],
   "source": [
    "def visualize_svd(X, title_X, title_U, title_S, title_V, fig_height=5):\n",
    "    \"\"\"\n",
    "    可视化SVD分解结果。\n",
    "    参数：\n",
    "    - X: 原始矩阵\n",
    "    - title_X, title_U, title_S, title_V: 各个矩阵的标题\n",
    "    - fig_height: 图形高度\n",
    "    返回：\n",
    "    - X, U, S, V: 输入矩阵和分解得到的矩阵\n",
    "    \"\"\"\n",
    "    U, S, V = svd(X)  # 调用SVD函数进行分解\n",
    "    \n",
    "    all_ = np.r_[X.flatten(order='C'), U.flatten(order='C'), S.flatten(order='C'), V.flatten(order='C')]  # 获取所有矩阵元素\n",
    "    all_max = 6  # 设置最大值\n",
    "    all_min = -6  # 设置最小值\n",
    "    \n",
    "    fig, axs = plt.subplots(1, 7, figsize=(12, fig_height))  # 创建图表\n",
    "\n",
    "    plt.sca(axs[0])\n",
    "    ax = sns.heatmap(X, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制原始矩阵\n",
    "    ax.set_aspect(\"equal\")\n",
    "    plt.title(title_X)\n",
    "\n",
    "    plt.sca(axs[1])\n",
    "    plt.title('@')\n",
    "    plt.axis('off')\n",
    "\n",
    "    plt.sca(axs[2])\n",
    "    ax = sns.heatmap(U, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制U矩阵\n",
    "    ax.set_aspect(\"equal\")\n",
    "    plt.title(title_U)\n",
    "\n",
    "    plt.sca(axs[3])\n",
    "    plt.title('@')\n",
    "    plt.axis('off')\n",
    "\n",
    "    plt.sca(axs[4])\n",
    "    ax = sns.heatmap(S, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制S矩阵\n",
    "    ax.set_aspect(\"equal\")\n",
    "    plt.title(title_S)\n",
    "\n",
    "    plt.sca(axs[5])\n",
    "    plt.title('@')\n",
    "    plt.axis('off')\n",
    "\n",
    "    plt.sca(axs[6])\n",
    "    ax = sns.heatmap(V.T, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制转置的V矩阵\n",
    "    ax.set_aspect(\"equal\")\n",
    "    plt.title(title_V)\n",
    "\n",
    "    return X, U, S, V  # 返回所有矩阵"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "064a7478-62e6-4c52-b87f-d73b483c03c1",
   "metadata": {},
   "source": [
    "## 设置随机数种子以确保结果可重复"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b0600c99-cfb7-4271-9c21-4b289e2d653f",
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(1)  # 设置随机种子"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a89d07d6-3398-4d83-9682-a6199484a79e",
   "metadata": {},
   "source": [
    "## 生成随机矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "84aaa0f4-e2c7-408a-b810-82f32815aaba",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = np.random.randn(6, 4)  # 生成6行4列的随机矩阵"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "575c0932-dfa0-4a37-9f4c-81db23833dc0",
   "metadata": {},
   "source": [
    "## 调整X矩阵的秩为3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "23022192-44de-455b-b710-68c58ad378bd",
   "metadata": {},
   "outputs": [],
   "source": [
    "X[:, 3] = X[:, 0] + X[:, 1]  # 将第4列设置为第1和第2列之和"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "916a1b3c-36d9-4e36-8155-0b4f09893789",
   "metadata": {},
   "source": [
    "## 可视化SVD结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "78dc189a-39cd-42ca-8561-25d8ea6d0304",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x300 with 11 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X, U, S, V = visualize_svd(X, '$X$', '$U$', '$S$', '$V^T$', fig_height=3)  # 对X进行SVD分解并可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "4644e8f4-496f-4383-81bc-b863d7228e1f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x300 with 11 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_2, U_2, S_2, V_2 = visualize_svd(X.T @ X, '$X^TX$', '$V$', '$S^TS$', '$V^T$', fig_height=3)  # 对X^T X分解并可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "faa499f6-7d6a-49db-92b6-05022c6638a0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x300 with 11 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "X_3, U_3, S_3, V_3 = visualize_svd(X @ X.T, '$XX^T$', '$U$', '$SS^T$', '$U^T$', fig_height=3)  # 对XX^T分解并可视化"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "54b3e5eb-1a4e-4f0d-a7bd-9074f416f971",
   "metadata": {},
   "source": [
    "## 验证U*U.T = I"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "d7a525a7-792a-4c44-9c05-36ae2d2fe3d7",
   "metadata": {},
   "outputs": [],
   "source": [
    "all_max = 6  # 设置最大值\n",
    "all_min = -6  # 设置最小值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "8ed51980-6fc9-4c85-b4f4-518dd7d31f62",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '$I$')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x300 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1, 3, figsize=(12, 3))  # 创建图表\n",
    "\n",
    "plt.sca(axs[0])\n",
    "ax = sns.heatmap(U, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制U矩阵\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$U$')\n",
    "\n",
    "plt.sca(axs[1])\n",
    "ax = sns.heatmap(U.T, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制U的转置\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$U^T$')\n",
    "\n",
    "plt.sca(axs[2])\n",
    "ax = sns.heatmap(U @ U.T, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制单位矩阵I\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$I$')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c348834b-bab0-4005-9614-ade8d69795b9",
   "metadata": {},
   "source": [
    "## 验证V*V.T = I"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "286326c0-9a70-4fe8-8dc3-3c06e38e95bf",
   "metadata": {},
   "outputs": [],
   "source": [
    "all_max = 6  # 设置最大值\n",
    "all_min = -6  # 设置最小值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "07602863-06aa-4a84-adf4-5f6a3f8c5422",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '$I$')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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0ksvjTvuuCPuv//+OOaYY7KO00tzc3Mcf/zxERExZ86ceOSRR+Laa6+Nb37zmxkng/qlHwdPPfdjhI6EgdKPg0c/sj/HEGegubk52traYvXq1b0uX716dZxxxhkZpcqXlFJccskl8W//9m/x4x//OKZNm5Z1pD6llKKzszPrGFDX9GP18tiPEToS+qIfq6cfKccrxBlZvHhxfPKTn4w5c+bE3LlzY8WKFbFly5ZYuHBh1tEiIuKtt96KJ598suf8M888E+vXr4/x48fHsccem2GyPRYtWhTf//7349///d9j7NixPb8tbW1tjVGjRmWcLuKLX/xinHfeefHe97433nzzzVi5cmXcd999cffdd2cdDeqefqxOvfdjhI6EQ6Ufq6MfKSuRmRtuuCEdd9xxqbm5Oc2ePTutWbMm60g97r333hQRB5w+9alPZR0tpZTKZouIdPPNN2cdLaWU0oUXXtjzv+173vOedM4556Qf/ehHWceC3NCPh67e+zElHQnV0I+HTj9Sjn+HGAAAgEJyDDEAAACFZBADAABQSAYxAAAAhWQQAwAAUEgGMQAAAIVkEAMAAFBIBjEAAACFZBADAABQSAYxAAAAhWQQAwAAUEgGMQAAAIVkEAMAAFBIwwf7DptnXRilpmE9p4jY8/WwYdG03+WlpqZe1ysNe+frpnK3L3O9PdctRampFKVS6Z2vm0rRVCrtve3e802lKDVF2ev1uk5pz/Wamva7/X63GVbmNLzX+aaeryNiz9elg1334Kf9b9tUKsWw0p5M7z7f8/Xen7HvfMT+l8U7t2vae/m7zpdKEU2x5797bhu9LmsqRZRi/+vu/bPsud475yP2XXe/6+x321JKEak7Sqk7InVHvPt8xN7LuyO6K1xv76m093qRUs9te12nuytS957/RndXpK6uPdfv7orUvefrtPd7EbHnfFfXO9ff/7aV7iciUnd3pK69p/2+7u7qOuB73V29z0fEO9fvuW7Xu+5n//tNe8+n6O5K+91+z/k995PeuV5XOuA2+64fEXvOd3fvvXzv7ffdJqXoSim6UpT9b0Ts/br89/f9tzsOvDzKXHZTera6IqpTzbMujIh3ddoA+nHfbZvefft+9uOe2x+k+/rRjxHRqyMH0o8RcUBHDqQf37l979v2px8jDuzIgfTjnsf9rj4cQD9GvOuyGEA/Rhy0+/rT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",
      "text/plain": [
       "<Figure size 1200x300 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1, 3, figsize=(12, 3))  # 创建图表\n",
    "\n",
    "plt.sca(axs[0])\n",
    "ax = sns.heatmap(V, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制V矩阵\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$V$')\n",
    "\n",
    "plt.sca(axs[1])\n",
    "ax = sns.heatmap(V.T, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制V的转置\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$V^T$')\n",
    "\n",
    "plt.sca(axs[2])\n",
    "ax = sns.heatmap(V @ V.T, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制单位矩阵I\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('$I$')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "214d02fa-cc26-4ede-b577-50ba215fb7a4",
   "metadata": {},
   "source": [
    "## 奇异值矩阵分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "a7eab03d-277c-4329-98fe-95bb8ca39de4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA7YAAAETCAYAAAACtJrsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAArgUlEQVR4nO3dfXhU5Z3/8c+ZSTIJRKJCiWGRQksVRUR5sqjYlipbdKW6dbt6KaVaXPFhV2VtVdRFd3GDsiL86sPa0ktxL1vsLtW63dWW/qRURRFiEVFQaC1gf0Z5KISEZJLMuX9/kAwZMkkmmfMw98z7dV25nDln5nzvHPPhPt85Z2YcY4wRAAAAAACWioQ9AAAAAAAAskFjCwAAAACwGo0tAAAAAMBqNLYAAAAAAKvR2AIAAAAArEZjCwAAAACwGo0tAAAAAMBqNLYAAAAAAKvR2AIAAAAArEZjCwAAAACwGo0t9KMf/Ujl5eUqLy9XSUmJiouLk/enTp0a9vAAZIgsA/mBLAP2I8fBc4wxJuxBIHf83d/9ncrLy7V48eKwhwIgC2QZyA9kGbAfOQ4GZ2yRYtOmTTr99NPDHgaALJFlID+QZcB+5DgYNLZIMsZo8+bNBA+wHFkG8gNZBuxHjoNDY4uk3//+94rH4xo9enTYQwGQBbIM5AeyDNiPHAeHxhZJb7/9tk466STFYrGwhwIgC2QZyA9kGbAfOQ4Oja1Ptm7dqpkzZ2r48OGKxWKqrKzUtGnT9P7772f0/MGDB+uGG27otHzSpEm68MILM9rGRRddpM9//vOdlhtjNHHiRJ1zzjkpy7n+H+iMLAP5gSwD9iPH6A6NrQ+2bdumiRMn6sCBA1q8eLFWrVqlpUuXqqqqSv379+/x+Tt27NDu3bs1bty4lOWtra3atGlTp+VdOeOMM/Thhx+qvr4+ZfnTTz+tmpoaLV26NGU5wQNSkWUgP5BlwH7kGD0pCnsA+eiZZ56R67p6/vnnFYkcee3g8ssvz+j5GzZskCSNHz8+ZfnmzZsVj8czDt7YsWNljNG7776rs846S5LU0NCgefPmadasWZowYULK4zdt2qTZs2dntG2gEJBlID+QZcB+5Bg94YytDwYNGqRDhw7p6quv1muvvaZEIpGy/vHHH9e4ceNUXFyse++9t9PzN2zYoJKSEp122mkpy2tqaiQpJXjdbWvs2LGSpHfeeSe5bOHChaqrq9O//uu/dqr7+9//XhdddFGvflcgn3WX5Xg8rquvvlonnniiBgwYoC9+8Ytau3ZtyvMzzXJP2yLLQHZ6mpcvv/xyVVZWasCAATr99NP1i1/8ImV9b+bl7rZFloG+6ynH7V5//XVFIhEtWLAgZXlvctzdtshx7qKx9cGcOXO0cOFCvfnmmzr33HNVVVWlm2++WXV1dZKkqqoq3XfffbrkkkvSPn/9+vUaM2aMiouLU5bX1NTo+OOP1/Dhw5PLutvWF77wBfXr1y8ZvF27dumhhx7SvHnzVFVVlXxcT402UKi6y3Jra6tGjBih1157Tfv379f111+vGTNm6NChQ8nnZ5rlnraVSZYzabSBQtXTvHzPPfdo165dqqur07Jly3TllVdq7969yef3Zl7ubluZzss9NdpAIeopx5Lkuq5uueUWTZo0qdPze5Pj7raVaY7bddVowwcGvtq1a5e55557jCTzve99L2Xdd77zHTN//vxOzzn++OPNtdde22n5yJEjzfnnn5+2TlfbmjRpkvnKV75ijDHmiiuuMCNGjDBNTU0pj3nuuefMCy+8YC677LK02wDQfZbbHXfccWbjxo3J+33Jclfb6inL9fX15r777jM7duwwiUTCPPXUU2bgwIGmoaGhV78nkO96ynJNTY0pLS01b7/9dnJZX7OcbluZzMubN2828XjcGGPMunXrzIABA8yePXt694sCeayrHD/22GPm1ltvNbNmzTL/8i//kvKc3ua4u21lkmNjjEkkEmbSpEnmrLPO6rQNeI8ztj4bOnSo7rrrLpWVlam1tbXHxzc3N2vfvn36i7/4i5TlK1eu1Pbt2zO+/r/d2LFj9c477+iNN97QihUrtGjRok4fN37JJZfo4osvVkVFRa+2DRSSnrK8detWNTY2Jj8pMZssH70tqecs9+/fX//0T/+kYcOGKRKJaNasWXJdV9u2bcv2VwfySldZvvLKK1VaWqrx48dr6tSpGjNmjKS+ZbmrbUmZzcujR49WSUmJJKmoqEjNzc3605/+5Nk+AGyXLsd79+7V0qVLNX/+/E6P722Ou9uWlFmOJemJJ57QOeeco1GjRvX1V0Uv8OFRHrvpppt04MABXXDBBRo2bJh2796tRx55RCUlJbruuut6fH5JSYk+97nP6ec//7muuuoqlZWV6fnnn9eDDz4oKf31/90ZO3asfvjDH+qaa67Reeedp2984xt9+r2AQtObLB86dEgzZ87U3XffrfLyckl9z3K6bUm9z3K65hgoRJlm+ZlnntHy5cv18ssva8uWLXIcR1LfstzVtqTMs3zllVdq5cqVisfjuvDCC1OaY6DQZJLjO++8U3Pnzk17oqa3Oe5uW1JmOW5vjtetW6ebb745212ADHDG1mOjRo3Sjh079N3vfldf+9rXdPvtt2vkyJF66623dNJJJ2W0jeXLlyuRSGj06NE655xz9Mc//lF33nmnpL41tpL0/vvva8mSJb16LlDIMs1yS0uLvvnNb+rUU0/VvHnzUrbR2yx3t63eZLmr5hgoRL2Zl4uKijRt2jStWrVK//u//5tc3pd5uattZZrlZ555RvX19frlL3+padOmpTTHQKHpKcc1NTV66623uv304UxznMm2MslxT80xvOcYY0zYgyhUs2fP1tChQz35wCYvtuXleIBC4LqurrzySh06dEgrV65UUVHfL4LxalstLS269NJLNXDgQD311FMcDAN9MH36dE2fPl3/8A//kBPb+qu/+ivdcMMNuvDCC7MeD5CPlixZonnz5qlfv36SpPr6ekWjUX3jG9/Q008/Hfi2ampqdN111+nNN99UJBLRt7/9bY0cOVJ33313734x9AqXIoegtbVVra2tSiQSam1tVVNTk4qLixWNRkPdFoDeue666/Txxx/rpZdeyqqp9WpbruvqW9/6lqLRqH70ox/R1AIZqK2t1Wuvvaavfe1risVi+tnPfqbVq1dr4cKFoW6ro0Qioe3bt2e1DSCfzZ49W5dddlny/ty5czV8+HDdfvvtoWzrlVde0XvvvafBgwdLOtIcf/DBB71utJE5LkUOwYIFC1RWVqannnpK999/v8rKyvQf//EfoW2rvSHu2Bx39d1gAA7bsWOHli1bpnXr1mnQoEEqLy9XeXm5XnnlldC21d4cP/vss1k32kAhWbJkiYYMGaJBgwZp0aJF+ulPf5q81DDobdXW1mrlypVqaGhQa2urfvrTn2r16tX60pe+1KfxAIWgvLxcQ4cOTf7069dPAwYM0MCBA0PZ1uzZs/XBBx9o48aN2rhxo2bMmKEbb7xRDz/8cK/Hg8xxKTJ077336r777ktZ9uSTT+rb3/52OAMC0Gs7duzQ8OHDVVpamnLFxosvvqgpU6aE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",
      "text/plain": [
       "<Figure size 1200x300 with 8 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1, 4, figsize=(12, 3))  # 创建图表\n",
    "\n",
    "for j in [0, 1, 2, 3]:\n",
    "    X_j = S[j, j] * U[:, j][:, None] @ V[:, j][None, :]  # 构建单项分解矩阵\n",
    "    plt.sca(axs[j])\n",
    "    ax = sns.heatmap(X_j, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制矩阵\n",
    "    ax.set_aspect(\"equal\")\n",
    "    title_txt = '$s_' + str(j + 1) + 'u_' + str(j + 1) + 'v_' + str(j + 1) + '^T$'\n",
    "    plt.title(title_txt)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7e9f071a-10db-4458-9b6d-60afb2fee551",
   "metadata": {},
   "source": [
    "## 投影可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "e8ec2a83-a426-4f9b-a717-c3d351f409b8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x300 with 11 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA8oAAAEPCAYAAACa1T0aAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAtZklEQVR4nO3deXxU9b3/8fcsySQsiZKYGGQJvSiiYpGAlk0UJS23VXG5IF4VZNEo1kpEbMSW5WKjVRSLSmlzL0utwnUptQ8FgSuiXkAhuCCCwA8Q7CUEBAOyTCYz5/dHYDhjQpJJZs6Zmbyej8c8zDln5nw/kfDh+87ZHIZhGAIAAAAAAJIkp90FAAAAAAAQSwjKAAAAAACYEJQBAAAAADAhKAMAAAAAYEJQBgAAAADAhKAMAAAAAIAJQRkAAAAAABOCMgAAAAAAJgRlAAAAAABMCMoRNGrUKHk8Hm3cuLHGtieeeEIOh0P/+Mc/bKgMQCLYunWrJkyYoLy8PJ111llq06aN+vbtq9dee83u0gAAQAJ74403NHz4cHXu3FmpqanKzc3Vv//7v2vbtm12lxY1BOUImjlzps4991yNGDFCPp8vuH7jxo2aPHmyRo4cqeuuu87GCmG3qqoqLViwQD//+c+VlZUlt9ut7Oxs5efna8GCBfL7/XaXiBi2bNkyvfXWW7r55pv16quv6q9//avOP/98/du//ZumTZtmd3kAgBjF/ANN9eSTT+rYsWOaNGmSli5dqunTp+uTTz5Rjx49tGnTJrvLiwqHYRiG3UUkkhUrVig/P1+/+c1vNHXqVPl8PvXq1UsHDx7Uxo0blZ6ebneJsMnGjRs1dOhQ7du3T3fddZd69uyp9u3bq6KiQmvXrtWCBQt0zjnnaNGiRfqXf/kXu8tFDDpw4IAyMjLkcDhC1v/iF7/QypUrdfDgQXk8HpuqAwDEIuYfiITy8nJlZWWFrPu///s/5ebm6s4771RJSYlNlUUPR5Qj7Nprr1VBQYF+97vfqbS0VFOmTNFnn32m//zP/yQkN2ObNm1Sv379dNVVV2nPnj2aMWOGhg8frn79+unnP/+5/uM//kNbtmxRz549NXDgQP3zn/+0u2RE0OLFi+VwOPQ///M/NbbNnj1bDodDn3/+eb37yczMrBGSJenyyy/XsWPHdPDgwYjUCwBIDMw/MHLkSOXm5tZYP2XKlFrnFGfyw5AsSW3btlW7du20Z8+eppQYswjKUfDUU0+pQ4cOuuWWW/Tkk0+qoKBAgwYNsrss2MTv92vo0KEaPXq0Zs+erZYtW9Z4j2EYSk5O1h//+EcNGDBABQUFNlSKaPnFL36hrKwszZ07t8a2efPmqUePHrr00ksbvf+VK1fqnHPOqfUfMSQGwzBUVVXVoBcASMw/EH07duzQ119/rYsvvtjuUqKCoBwFLVu21PTp07Vr1y6dc845euqpp+wuCTZauHChjh49qieeeEKSFAgENG3aNJ133nlKTU3VzTffrKefflrXXHONJOnZZ5/VihUrtH37djvLRgS53W7dfvvteuONN1RRURFcv3nzZn388ce66667Gr3vkpISvffee3rsscfkcrkiUS5i0KpVq5SUlNSg165du+wuF0AMYP6BaKqqqtLo0aPVqlUrjR8/3u5yooKgHAWBQECzZs2S0+lUeXm5PvvsM7tLgo0WL16skSNHKjk5WZL0/PPP6/e//70eeeQRvf322zrvvPP0m9/8Jvj+jIwM9e7dWytXrrSrZETBqFGjdPz4cS1atCi4bu7cufJ4PLrtttsatc8lS5Zo3LhxuuWWW/TLX/4yUqUiBuXl5WndunUNerVt29bucgHEAOYfiBbDMDR69Gh98MEHWrBggdq3b293SVHhtruARPT0009rzZo1WrhwoSZPnqxRo0bp008/VWpqqt2lwQZbt27V8OHDg8tz5sxRUVGRHnjgAUnS1VdfrS+++EKBQCD4nuzsbO3fv9/yWhE9F198sXr16qW5c+fq7rvvlt/v10svvaQbbrhBbdq0CXt/77zzjm666SYNGjRIf/3rX8O6zgjxp1WrVurevXuD3ut28087AOYfiA7DMDRmzBi99NJLmj9/vm644Qa7S4oajihH2Jdffqnf/va3uvPOOzVs2DDNmzdP27dv16RJk+wuDTbx+XxKSUkJLu/cuVM9evQIeU+vXr1Clr/55htlZmZaUh+sc9ddd2nt2rXavHmzli5dqr179zbqtOt33nlHQ4YM0YABA/T6668HjxYgcXHqNYBwMf+AJKWkpMjr9dZYf+DAgbD3dSokz507VyUlJbr99tsjUWLM4tfOEVRVVaURI0YoMzNTzz33nCTpJz/5iQoLC/XMM8/o5ptvVt++fW2uElbr0KGDtm7dqn/913+VVP3b2h9OZHfu3Bn8euvWrfr44481f/58K8uEBYYPH67CwkLNmzdPO3bs0Hnnnaf8/Pyw9rFs2TINGTJE/fr10+LFi3kcVDNx6tTrhuDUawAS8w9Uy83NVXl5ufbt26fs7GxJUmVlpd55552w9mMYhsaOHau5c+dqzpw5Tbq/StwwEDHTpk0zJBlLliwJWX/8+HGjS5cuxgUXXGAcO3bMpupglxkzZhhXXHFFcHnixIlGu3btjPfff9/47rvvjL/85S+G2+02+vXrZyxbtszo1KmTUVhYaGPFiKbhw4cbWVlZRnJysvHoo4+G9dkPPvjASE1NNXJzc413333XWLNmTciroqIiSlUDAOIN8w8YhmHs2LHDSEpKMq666irjrbfeMl5//XVjwIABRqdOnYxwouD9999vSDJGjRpVY/6xYcOGKH4H9iEoR8inn35qJCUlGWPHjq11+5o1awyn02mMHz/e4spgt0OHDhlt2rQx5s2bZxiGYRw5csQYMmSIIcmQZJx//vnGww8/bEgysrOzjaefftoIBAI2V41oWbZsWfDPfuvWrWF9dvLkycHP1vZauXJldIoGAMQd5h845e233za6d+9upKamGj/60Y+M559/PjinaKiOHTuecf7RsWPH6BVvI4dhGIZlh6+BZuq1117THXfcofnz52vo0KGSpPLych08eFBdunTRoUOH9N1336lTp07clAkAAEQE8w+g8QjKgEVeeukl3X333Ro4cKDGjh2ryy+/XGeffbYOHToUvCboyJEjWrZsGf9YAQCAiGD+ATQOQRmw0M6dO/W73/1Ob7zxhg4ePBhcn5OTo9tuu00TJ05UVlaWjRXCDoZhyO/31/kel8vFBAYA0CjMP3AmgUAg5BFhtWmujx0kKAM2CAQC2rNnjyoqKtSmTRu1a9fO7pJgo/fee09XX311ne+ZO3euRo4caU1BAICExPwDPzRy5Mh673TeXOMiQRkAbHbkyBF99dVXdb6nU6dOysjIsKgiAADQHOzataveZyr37NnTompiC0EZAAAAAAATp90FAAAAAAAQSwjKAAAAAACYxMwtzHwfLbZsrH3nX2vZWC6ndXepzfpum2VjuXK7WzYWEC++/vZ7u0uoU8eMVnaXAAAALGTl3CTR5hkcUQYAAAAAwISgDAAAAACACUEZAAAAAAATgjIAAAAAACYEZQAAAAAATAjK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",
      "text/plain": [
       "<Figure size 1200x300 with 11 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x300 with 11 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA8oAAAEPCAYAAACa1T0aAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAtBklEQVR4nO3df3QU9b3/8df+yiYCiZCUGIQAPVRAQZFAERBBKun13qr444h4RBDEgnivwBd/4C/UYqNV+XFQEcstP9rjxXurUnoqKXBFFAENWCw/BQpcoIcQEAkQks1md75/BJZZE5Nssjuzu3k+ztljZmYznzeQvJ3XzsxnHIZhGAIAAAAAAJIkp90FAAAAAAAQTwjKAAAAAACYEJQBAAAAADAhKAMAAAAAYEJQBgAAAADAhKAMAAAAAIAJQRkAAAAAABOCMgAAAAAAJgRlAAAAAABMCMpRNHbsWHm9Xm3btq3GtpdfflkOh0N//vOfbagMQDLauXOnvF6vHA6HNm/ebHc5AACgmXjmmWfkcDjUo0cPu0uJGYJyFM2ZM0eXXXaZRo8eLb/fH1q/bds2zZgxQ2PGjNEtt9xiY4WwW1VVlZYuXap/+7d/U9u2beV2u5Wdna38/HwtXbpUgUDA7hKRIAKBgMaOHausrCy7SwEAxDmOPxBNW7du1Wuvvabs7Gy7S4kpgnIUpaen6z//8z+1detWzZw5U5Lk9/s1atQoZWdna86cOfYWCFtt27ZNPXv21OTJk9WtWzfNnTtXn3zyiX73u9+pX79+evbZZ9WvXz/94x//sLtUJIDZs2fryJEjeuKJJ+wuBQAQxzj+QDRVVVXpgQce0C9/+Ut169bN7nJiy0DUTZw40XC73cbmzZuNp556ypBkrFq1yu6yYKPt27cb6enpxoQJE4yzZ8/W+p5z584Zv/zlL43c3FzjyJEjFleIWPrwww8NScaaNWtqbHvrrbcMScbXX3/d4P3t2bPHSEtLM/70pz8ZixYtMiQZRUVF0SwZAJAEOP7A6NGjjY4dO9ZYP2PGDKMxUfBXv/qVkZuba5w5c8YYPHiwcdVVV0WhyvjEGeUYePXVV5Wbm6u77rpLr7zyiiZMmKBhw4bZXRZsEggEdPfdd2vcuHGaP3++WrRoUeM9hmEoJSVFb7/9tgYPHqwJEybYUCli5Re/+IXatm2rRYsW1di2ePFi9e7dW1dffXWD9mUYhh588EH94he/0K233hrtUhGnDMNQVVVVg14AIHH8gejbuXOnZs6cqfnz56tly5Z2lxNzBOUYaNGihWbOnKmDBw/qRz/6kV599VW7S4KNli1bprKyMr388suSpGAwqBdffFGXX3650tLSdOedd+q1117Tz372M0nVl9SuWbNG+/bts7NsRJHb7dZ9992nDz74QKWlpaH1u3bt0pdffqkHHnigwft68803tW3bNs2bNy8WpSJOrVu3Th6Pp0GvgwcP2l0ugDjA8QeiKRgMauzYsbrjjjv0r//6r3aXYwm33QUko2AwqHnz5snpdKqkpERff/21Bg4caHdZsMny5cs1ZswYpaSkSJLeeOMN/eY3v9Gvf/1r9ezZUx9++KGeffZZXXfddZKkzMxM9e/fX2vXrlWXLl3sLB1RNHbsWM2aNUvvvfeeHnroIUnSokWL5PV6de+99zZoH//3f/+n6dOna86cOUk/gQbC5eXlqaioqEHvbdeuXYyrAZAIOP5ANM2aNUt79+7VihUr7C7FMgTlGHjttde0ceNGLVu2TDNmzNDYsWO1detWpaWl2V0abLBnzx6NHDkytLxgwQJNnz5d//Ef/yFJuvHGG7V9+3YFg8HQe7Kzs3X8+HHLa0XsXHXVVerbt68WLVqkhx56SIFAQH/4wx902223qU2bNg3ax6RJk9SjRw/deeedOnXqlCTp3LlzkqSzZ8+qtLRUGRkZsfojwEYtW7ZUr169GvRet5v/tQPg+APRc+jQIT333HN6+eWXlZKSEjoGqaqqUjAY1KlTp+T1epMu63DpdZTt3LlTzz33nO6//36NGDFCixcv1r59+/T000/bXRps4vf7lZqaGlo+cOCAevfuHfaevn37hi0fOXKEx/4koQceeECbNm3Srl27VFhYqKNHj0Z02fX27du1adMmtW7dOvSaNGmSpOoDno4dO8aqdNiMS68BRIrjD0hSamqqfD5fjfUnTpxo8D7279+v8vJyPfroo2HHIJ9//rl27dql1q1ba/r06dEsOy7wsXMUVVVVafTo0crKytLcuXMlSdddd52mTp2qWbNm6c477+QS7GYoNzdXe/bsCd3PkZ2dXeNA9sCBA6Gv9+zZoy+//FJLliyxskxYYOTIkZo6daoWL16s/fv36/LLL1d+fn6Dv3/ZsmWqqKgIW1dYWKhXXnlF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",
      "text/plain": [
       "<Figure size 1200x300 with 11 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for j in [0, 1, 2, 3]:\n",
    "    fig, axs = plt.subplots(1, 7, figsize=(12, 3))  # 创建图表\n",
    "    \n",
    "    v_j = V[:, j]\n",
    "    v_j = np.matrix(v_j).T  # 转置v_j\n",
    "    s_j = S[j, j]\n",
    "    s_j = np.matrix(s_j)  # 转换为矩阵格式\n",
    "    u_j = U[:, j]\n",
    "    u_j = np.matrix(u_j).T  # 转置u_j\n",
    "    \n",
    "    plt.sca(axs[0])\n",
    "    ax = sns.heatmap(X, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制X矩阵\n",
    "    ax.set_aspect(\"equal\")\n",
    "    plt.title('X')\n",
    "    \n",
    "    plt.sca(axs[1])\n",
    "    plt.title('@')\n",
    "    plt.axis('off')\n",
    "    \n",
    "    plt.sca(axs[2])\n",
    "    ax = sns.heatmap(v_j, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制v_j\n",
    "    ax.set_aspect(\"equal\")\n",
    "    plt.title('v_' + str(j + 1))\n",
    "    \n",
    "    plt.sca(axs[3])\n",
    "    plt.title('=')\n",
    "    plt.axis('off')\n",
    "    \n",
    "    plt.sca(axs[4])\n",
    "    ax = sns.heatmap(s_j, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制s_j\n",
    "    ax.set_aspect(\"equal\")\n",
    "    plt.title('s_' + str(j + 1))\n",
    "    \n",
    "    plt.sca(axs[5])\n",
    "    plt.title('@')\n",
    "    plt.axis('off')\n",
    "    \n",
    "    plt.sca(axs[6])\n",
    "    ax = sns.heatmap(u_j, cmap='RdBu_r', vmax=all_max, vmin=all_min, cbar_kws={\"orientation\": \"horizontal\"})  # 绘制u_j\n",
    "    ax.set_aspect(\"equal\")\n",
    "    plt.title('u_' + str(j + 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "85a80909-2aac-49ed-bb7a-f8cc6b80ee7d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ecd322f4-f919-4be2-adc3-69d28ef25e69",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
